<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>偏函数</title>
</head>
<body>
<script>
    /*
    * 偏函数就是在对函数进行包装的时候传入一些参数，那么我们在使用的时候就不需要传递那么多参数了
    * */

    let obj = {
        beforeAge: 23,
        afterAge: 24,
        setAge(beforeAge, afterAge) {
            this.beforeAge = beforeAge
            this.afterAge = afterAge
            console.log(this.beforeAge, this.afterAge)
        }
    }

    /*对象的方法进行一次重绑定的话就可以直接进行调用了而不会丢失this
    * 当然这种方式我们是只要在可以获得this的时候才能进行绑定
    * */
    let foo = obj.setAge.bind(obj, 30)

    function decor(f, ms) {
        return function (b) {
            setTimeout(() => {
                f(b)
            }, ms)
        }
    }

    foo = decor(foo, 2000)

    foo(31)

    console.log("=============================")

    /*在那种不能获得this的情况下一般都会通过对象来调用 我们可以在调用的这个时机获得this*/


    function decorPro(f, ...args1) {
        return function (...args2) {
            setTimeout(() => {
                f.call(this, ...args1, ...args2)
            })
        }
    }

    let foo1 = decorPro(obj.setAge, 40)
    foo1(41)


</script>
</body>
</html>